package com.mkx.multitier.asynctask;

import java.time.Duration;
import java.time.Instant;
import com.mkx.multitier.Task;

/**
 * 异步任务接口，定义异步任务的基本操作
 */
public interface AsyncTask extends Task {
    /**
     * 执行异步任务
     */
    @Override
    void execute();
    
    /**
     * 获取任务执行时间点
     */
    Instant getExecuteTime();
    
    /**
     * 设置任务延迟执行时间
     */
    void setDelay(Duration delay);
    
    /**
     * 是否可重试
     */
    boolean isRetryable();
    
    /**
     * 获取最大重试次数
     */
    int getMaxRetries();
    
    /**
     * 获取当前重试次数
     */
    int getCurrentRetryCount();
    
    /**
     * 增加重试次数
     */
    void incrementRetryCount();
    
    /**
     * 获取任务类型
     */
    String getTaskType();
}
